package definition;
/**
 * 四种内部类的定义
 * 成员内部类：类似于类的成员属性
 * 静态内部类：类似于类的静态成员属性
 * 局部内部类：定义于代码块（方法、静态代码块或非静态代码块）内部
 * 匿名内部类：直接通过关键字new实现既有类
 * @author fidel
 */
public class InnerClassDefinition {
    {
        /**
         * 局部内部类
         * @author fidel
         */
        @SuppressWarnings("unused")
        class CodeBlockClass {}
    }
    static {
        /**
         * 局部内部类
         * @author fidel
         */
        class StaticCodeBlockClass {
            @Override
            public String toString() {
                return String.valueOf(super.hashCode());
            }
        }
        System.out.println(new StaticCodeBlockClass().toString());
    }
    /**
     * 成员内部类
     * @author fidel
     */
    @SuppressWarnings("unused")
    private class MemberClass {}
    
    /**
     * 静态内部类
     * @author fidel
     */
    static class StaticMember {}
    
    public void method1() {
        /**
         * 局部内部类
         * @author fidel
         */
        @SuppressWarnings("unused")
        class InnerClass {}
    }
    
    public void method2() {
        /**
         * 匿名内部类（同时也是局部内部类）
         * @author fidel
         */
        (new Thread() {}).start();
    }
}
